import {useAuthStore} from '@/stores/auth'

// 延迟导入路由器，避免循环依赖
let router: any = null

// 白名单路由
const whiteList = ['/login']

// 设置路由器实例
export const setRouter = (routerInstance: any) => {
  router = routerInstance
  setupRouterGuards()
}

// 设置路由守卫
function setupRouterGuards() {
  if (!router) return

  // 路由守卫
  router.beforeEach(async (to: any, from: any, next: any) => {
    const authStore = useAuthStore()

    // 只在访问需要认证的页面时才初始化认证状态
    if (!whiteList.includes(to.path)) {
      authStore.initAuth()

      // 给一个微小的延迟确保computed属性更新
      await new Promise(resolve => setTimeout(resolve, 0))
    }

    // 检查是否需要认证
    if (whiteList.includes(to.path)) {
      // 白名单路由，直接通过
      if (authStore.isAuthenticated) {
        // 已登录用户访问登录页，重定向到首页
        next('/')
      } else {
        next()
      }
    } else {
      // 需要认证的路由
      if (!authStore.isAuthenticated) {
        // 未登录，重定向到登录页
        next('/login')
      } else {
        // 已登录，检查权限
        if (to.meta?.roles) {
          const requiredRoles = to.meta.roles as string[]
          const hasPermission = requiredRoles.some((role: string) =>
            authStore.hasPermission(role as any)
          )

          if (!hasPermission) {
            // 权限不足，重定向到首页或403页面
            next('/403')
          } else {
            next()
          }
        } else {
          next()
        }
      }
    }
  })
}

// 注意：401错误处理现在由 api/interceptors.ts 统一处理
// 这里不再需要单独的拦截器，避免重复处理